package com.cdvtc.news.service;


import com.cdvtc.news.entity.News;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 新闻服务接口
 */
public interface NewsService {
    /**
     * 根据分类或标签获取新闻列表（没有标签和分类时返回首页【置顶】新闻）
     * @param categoryId
     * @param tagId
     * @return
     */
    List<News> getNews(Integer categoryId, Integer tagId);

    /**
     * 根据Id获取新闻
     * @param newsId
     * @return
     */
    News getNewsById(int newsId);

    /**
     * 获取推荐新闻列表
     * @param newsId
     * @return
     */
    List<News> getRecommendedNews(int newsId);

    /**
     * 获取置顶新闻（首页展示）
     * @param limit 限制数量
     * @return
     */
    List<News> getStickNews(@Param("limit") int limit);

    /**
     * 获取热点新闻（24小时内发布或评论，前10条）
     * @return
     */
    List<News> getHotNews();

    /**
     * 更新新闻点击数
     * @param newsId
     */
    void updateClickCount(int newsId);

    /**
     * 按照分类统计新闻数
     * @return
     */
    List<Map<String, Object>> statNewsCountByCategory();

    /**
     * 按照标签统计新闻籹
     * @return
     */
    @MapKey("id")
    List<Map<String, Object>> statNewsCountByTag();

    /**
     * 按照日期统计新闻评论数
     * @return
     */
    @MapKey("date")
    List<Map<String, Object>> statNewsCommentCountByDate();

    /**
     * 按照用户统计新闻评论数
     * @return
     */
    @MapKey("nickname")
    List<Map<String, Object>> statNewsCommentCountByUser();

    /**
     * 分页查询新闻列表
     * @param pageNumer 当前分页
     * @param pageSize 分页大小
     * @return
     */
    Page<News> getPagedNews(Integer pageNumer, Integer pageSize);

    /**
     * 增加新闻
     * @param news
     */
    Integer addNews(News news);

    /**
     * 更新新闻
     * @param news
     */
    void updateNews(News news);
}
